/**
 * 高阶函数 工具
 * @author lawrence
 * @date 2019-03-26
 */
import React, {Component} from "react";

/**
 * 提供统一的组件加载样式
 * @param propName 属性名称
 * @param WrappedComponent 封装组件（如：Text）
 * @param getLoader 返回加载组件的方法 (): Component => {}
 * @return LoaderHook组件
 */
export const LoaderHook = (propName) => (WrappedComponent) => (getLoader) => {
    return class LoaderHook extends Component {
        isEmpty(prop) {
            return (
                prop === null
                || prop === undefined
                || (prop.hasOwnProperty('length') && prop.length === 0)
                || (prop.constructor === Object && Object.keys(prop).length === 0)
            );
        }

        render() {
            return this.isEmpty(this.props[propName]) ?
                getLoader() : <WrappedComponent {...this.props}/>
        }
    }
};

export default {
    LoaderHook
}

